<% ASP на блюдечке %>. Часть 15

Создаем гостевую книгу своими руками

Рубен Садоян (rouben@iname.com)

Введение

Что такое гостевая книга?

Для чего нужна гостевая книга?

Что нам понадобится

Создание и подготовка базы данных

Интеграция системы в уже готовый сайт

Главная страничка гостевой книги (файл Guest.asp)

Форма ввода новых значений

Заключение

Введение

Примеры, рассмотренные нами в предыдущих частях настоящей статьи, по своей сути в той или иной степени представляли разнообразные интерфейсы к базам данных, а в 14-й части (в №10’2001) мы показали вам один из механизмов привлечения внимания пользователей к сайту. В настоящей статье мы изложим материал, которого будет достаточно для самостоятельной разработки еще одной системы, позволяющей увеличить интерес к вашему сайту и оснастить последний функционалом для обеспечения обратной связи с пользователями. Мы  также рассмотрим вопрос об организации переносимого модуля, который может обеспечить легкое и удобное встраивание такой системы практически в любой сайт независимо от его сложности.

В начало В начало

Что такое гостевая книга?

Разумеется, здесь речь идет о наиболее типичной гостевой книге. Прежде всего это система, предоставляющая пользователю возможности для ввода текста, выбора оценки того или иного сайта, а также для указания собственных данных (ФИО, e-mail, http и т.д.). Это также система представления данных, введенных различными пользователями, с возможностью навигации, отправки электронных писем авторам сообщений. Возможны и вариации с различными настройками и с контролем нормативности лексики.

В начало В начало

Для чего нужна гостевая книга?

Гостевая книга — основной механизм, обеспечивающий обратную связь с пользователями сайта, особенно в том случае, если пользователь желает сделать свое мнение достоянием общественности. Нередки случаи, когда гостевые книги на сайтах превращались в места для дискусий (в форумы, чаты). Таким образом, гостевая книга также (как и система электронного голосования) может пробудить интерес к вашему сайту, а следовательно является еще одним средством привлечения внимания пользователей.

В начало В начало

Что нам понадобится

Конечно, предполагается, что читатель знаком с основами ASP- и SQL-программирования (знакомства с первыми частями настоящей статьи для этого будет вполне достаточно). Кроме того, нам потребуется Microsoft SQL Server 7.0 или 2000, какой-нибудь HTML- или текстовый редактор (рекомендую использовать Macromedia Dreamweaver UltraDev 4.0) и немного терпения.

В начало В начало

Создание и подготовка базы данных

Для организации хранения введенных пользователями данных вам понадобиться одна таблица, где можно завести поля для хранения имени пользователя, его электронного адреса, страны проживания, адреса сайта, IP-адреса, значения оценки пользователем сайта по пятибалльной шкале и т.д:

Представим себе пример реализации такой таблицы: .

В целях удобного встраивания системы в уже существующие сайты рекомендуется спланировать еще одну таблицу, предназначенную для хранения цветовых и других установок. Это позволит в дальнейшем изменять указанные установки без изменений соответствующих параметров в исходных текстах модулей приложения гостевой книги.

Далее необходимо прописать вашу базу данных в соответствующем разделе источников данных системы. Для этого сделайте следующее.

Теперь, когда база данных готова, можно переходить непосредственно к созданию гостевой книги.

В начало В начало

Интеграция системы в уже готовый сайт

Понятно, что сама по себе гостевая книга не имеет смысла. Посудите сами: кому нужен сайт, предназначенный исключительно для сбора мнений читателей. Ведь для того чтобы собирать мнения о чем-либо, надо сначала это что-либо представить на их суд. Следовательно, необходимо уделить особое внимание моментам, связанным с упрощением встраивания системы в уже готовые сайты.

В частности, для упрощения настройки системы под характерные особенности того или иного сайта рекомендуется (как уже говорилось выше) создать специальную таблицу для хранения всех этих предпочтений, чтобы заносить в нее определенные значения, специфические для вашего сайта. Очевидное преимущество такого подхода заключается в том, что для осуществления встраивания системы в уже готовый сайт не потребуется производить изменения в исходном коде модулей, нужно изменить только настройки в соответствующей таблице базы данных.

Представим себе пример реализации такой таблицы: .

Как видите, здесь присутствуют поля для хранения информации об имени и пароле доступа к режиму настройки системы, о цветах основного фона сообщения пользователей, верхней и нижней рамок (поля Mid_Color, Top_Color, Bot_Color соответственно), о цвете и размере  заголовка формы, служащей для ввода пользователем данных (поля Form_Color и FormTitleSize соответственно), о цвете, размере и начертании шрифра текста самого сообщения, информационных полей, а также самих страниц с гостевой книгой (поля MessageFontColor, MessageFontSize,  MessageFontFace, InfoFontColor, InfoFontSize,  InfoFontFace, PageFontColor, PageFontSize  и PageFontFace соответственно), полей-переключателей для включения режима автоматической отправки уведомлений о поступлении новых сообщений по электронной почте ответственному лицу (например, менеджеру или администратору сайта), поля хранения электронного адреса ответственного лица, текста сообщения с благодарностями за оставленное пользователем сообщение, со списком недопустимых слов и переключателем режима их фильтрации (если последний включен, то слова, находящиеся в списке недопустимых, будут автоматически заменяться в тексте сообщения на звездочки и таким образом будет осуществлен контроль за нормативностью лексики текстов сайта).

Развитие системы интеграции гостевой книги подразумевает организацию и Web-интерфейса для настройки всех рассмотренных нами параметров (полей таблицы администрирования).

Интеграция системы в уже готовый сайт в чистом виде может создавать некоторые сложности и при восприятии исходного текста, и в дальнейшем, если, например, потребуется временно отключить гостевую книгу на том или ином сайте. Поэтому попытаемся разработать систему таким образом, чтобы ее интеграция в готовый сайт не составила особого труда. Для этого необходимо сформировать независимый модуль системы и включить его в текст основного сайта там, где это необходимо. Так, к примеру, текст страницы вашего сайта может выглядеть следующим образом:

<head>  
<title>ASP на блюдечке (Часть - 15) – Гостевая книга </title>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
</head>  
   
<body  marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" >  
…  
<!-- #include file="Guest.asp"-->  
…  
</body>  
</html>  

или

<!-- #include file="mainheader.inc"-->  
<!-- #include file="Guest.asp"-->  
<!-- #include file="mainfooter.inc"-->  

Как видите, в первом случае директива о включении странички с гостевой книгой (<!-- #include file="Guest.asp"-->) указана в нужном месте, а во втором случае страничка исходного сайта представлена просто в виде трех последовательно включаемых элементов: начала, странички с гостевой книгой и конца. Использование того или иного способа организации структуры странички вашего сайта — дело вкуса и зависит как от структуры исходного сайта, так и от степени его сложности.

В начало В начало

Главная страничка гостевой книги (файл Guest.asp)

В представленном приложении будет всего одна страничка, которая будет служить и для отображения сообщений пользователей, и для навигации и ввода новых сообщений. В зависимости от значений ключевых параметров будет осуществляться то или иное действие, а страничка будет находиться в том или ином состоянии. Прежде всего вам потребуется разработать ту ее часть, на которой будет происходить показ сообщений пользователей и в которой будут размещены ссылки на часть, служащую для добавления новых сообщений.

Для начала напишем несколько функций для работы со строками:

<!--#include file="config.asp"-->  
  1. Функцию замены пустой строки на пробел и одинарной кавычки на двойную:
    <%  
     Function ChkString(string)  
      If string = "" then string = " "  
      ChkString = Replace(string, "'", "''")  
     End Function  
    %>  
  2. Функцию проверки лексики текста сообщения на нормативность. В случае обнаружения совпадений слов со словами из списка недопустимых следует заменять их на звездочки:
    <%  
     Function ChkBadWords(String2)  
      strBadWords = objRec2("BadWords")  
      bwords = split(strBadWords, "|")  
      For i = 0 to ubound(bwords)  
       String2 = Replace(String2, bwords(i), string(len(bwords(i)),"*"), 1,-1,1)   
      Next  
      ChkBadWords = String2  
     end function  
       
       
    %>  
  3. Функцию форматирования текста, введенного пользователем. В случае необходимости (при наличии соответствующего флажка в базе данных) будет проверяться (фильтроваться) текст на предмет нормативности:
    <%  
      Function FormatStr(String)  
                on Error resume next  
                String = Server.HTMLEncode(String)  
                String2 = Replace(String, CHR(13), "")  
                String2 = Replace(String, CHR(10) & CHR(10), "</P><P>")  
                String2 = Replace(String, CHR(10), "<br>")  
                If objRec2("BadOn") = True then  
                   String2 = ChkBadWords(String2)  
                 End if  
                FormatStr = String2  
      End Function  
    %>  
  4. Функцию проверки заполнения полей:
    <%  
      Function ValidateField(sFieldValue, sFieldType)  
         Valid = True  
         Select Case LCase(sFieldType)  
            Case "name"  
                If Len(sFieldValue) = 0 Then Valid = False  
            Case "message"  
                If Len(sFieldValue) = 0 Then Valid = False  
           End Select  
           ValidateField = Valid  
      End Function  
    %>  
  5. Процедуру добавления новых сообщений (обратите внимание на то, каким образом вычисляется IP-адрес компьютера, с которого посланно сообщение):
<%  
 Sub Update  
            strSql = "insert into Messages (Name, Country, Email, URL,IP,Message,Rating) values ('"  
            strSql = StrSql & ChkString(Request.Form("name")) & "', '"  
            strSql = StrSql & ChkString(Request.Form("Country")) & "', '"  
            strSql = StrSql & ChkString(Request.Form("email")) & "', '"  
            strSql = StrSql & ChkString(Request.Form("URL")) & "', '"  
            strSql = StrSql & Request.ServerVariables("REMOTE_ADDR") & "', '"  
            strSql = StrSql & ChkString(Request.Form("Message")) & "', '"  
            strSql = StrSql & ChkString(Request.Form("Rating")) & "')"  
            objConn.Execute (StrSql)  
%>  

После этого извлекаются и применяются параметры цветов, размеров, шрифтов оформления из соответствующей таблицы:

 <font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"    
    size="<%=objRec2("FormTitleSize")%>"><b>Спасибо за вашу запись в нашей гостевой книге!</b><p>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"     
   size="<%=objRec2("PageFontSize")%>">Для просмотра вашей записи кликните<a href="guest.asp"> здесь</a></b>  

А теперь отправьте электронное письмо менеджеру или администратору с уведомлением о поступлении нового сообщения в гостевую книгу в случае необходимости:

<%  
   
   If Not(Request.Form("email"))="" AND objRec2("AutoEmail")=True then  
     Name = Request.Form("name")  
     Email = Request.Form("email")  
     sFrom = objRec2("YourEmail")  
     sTo=Email  
     sSubject = "Спасибо, Ваша запись в нашей гостевой книге принята!"  
     sMessage = "Дорогой(ая) " & Name & vbcrlf _  
                        & vbcrlf _  
                        & objRec2("ThankMessage") & vbcrlf _  
                           & vbcrlf _  
                          & vbcrlf  
   
     Set objNewMail = CreateObject("CDONTS.NewMail")  
     objNewMail.Send sFrom, sTo, sSubject, sMessage  
     Set objNewMail = Nothing  
   End If  
   
   If objRec2("YouEmail")=True then  
     Name = Request.Form("name")  
     Home_Page = Request.Form("url")  
     Email = Request.Form("email")  
     Message = Request.Form("message")  
     Country = Request.Form("Country")  
     Address = Request.ServerVariables("REMOTE_ADDR")  
     Rating = Request.Form("Rating")  
     If Rating ="0" then  
     Rating="No Rating"  
   End If  
   
   sFrom = objRec2("YourEmail")  
   sTo= objRec2("YourEmail")  
   sSubject = "Новое сообщение"  
   sMessage = "Привет," & vbcrlf _  
               & "Новое сообщение поступило в гостевую книгу" & vbcrlf _  
               & vbcrlf _  
               & ":" & vbcrlf _  
               & vbcrlf _  
               & Message  & vbcrlf _  
               & vbcrlf _  
             & "Детали сообщения:" & vbcrlf _  
             & "Ваше имя: " & Name & vbcrlf _  
             & "Email: " & Email & vbcrlf _  
             & "URL: " & Home_Page & vbcrlf _  
             & "Страна: " & Country & vbcrlf _  
             & "Рейтинг: " & Rating & vbcrlf _  
             & "Адрес: " & Address  
   
    Set objNewMail = CreateObject("CDONTS.NewMail")  
    objNewMail.Send sFrom, sTo, sSubject, sMessage  
    Set objNewMail = Nothing  
   End If  
End Sub  
%>  
В начало В начало

Форма ввода новых значений

Целесообразно также вовлечь в процедуру показ формы, служащей для добавления новых сообщений (обратите внимание, что форма замкнута на себе, то есть в качестве реакции на нее служит модуль, который именно ее и содержит):

<%  
 Sub ShowForm(Sign)  
%>  
 <center>  
<form action="guest.asp?mode=post" method="post">  
   
 <table width=400 border=0 cellpadding=3 cellspacing=0 bgcolor=<%=ObjRec2("Form_Color")%>>  
   <tr>  
  <td colspan=2 align=center><font face="<%=objRec2("PageFontFace")%>"color="  
  <%=objRec2("PageFontColor")%>" size="<%=objRec2("FormTitleSize")%>">  
<b>Оставьте запись в нашей гостевой книге</b>  
<p><font size="<%=objRec2("PageFontSize")%>"><font color=red><sup>*</sup>  
</font>Обозначает поля, которые обязательно нужно запомнить</font></font>  
</td>  
</tr>  
   
 <tr><td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>  
 <font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"    
  size="<%=objRec2("PageFontSize")%>"> <b>Ваше имя:</b>  
<font color=red><sup>*</sup></font></td></tr>  
 <tr>  
<td width=230><input name="name" value="<%= Request.Form("name") %>" size=30>  
</td>  
<td width=170>  
<%  
  If dictFields(LCase("name")) Then  
    Response.Write "<font size=""-2"" color=""red"" face=""verdana,arial,sans-serif""> You must enter a name</font><br>"  
  Else  
    Response.Write "<font size=""-2"">&nbsp;<br></font>"  
  End If  
%>  
   
 </td></tr>  
 <tr>  
<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"    
  size="<%=objRec2("PageFontSize")%>">  
<b>Email:</b>  
</td>  
</tr>  
   
<tr>  
<td colspan=2><input name="email" value="<%= Request.Form("email") %>" size=30>  
</td>  
</tr>  
   
 <tr>  
<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">   
<b>URL:</b>  
</td>  
</tr>  
   
<tr>  
<td colspan=2> <font face="<%=objRec2("PageFontFace")%>" color="  
<%=objRec2("PageFontColor")%>  
" size="<%=objRec2("PageFontSize")%>"> <a href="http://&nbsp;%3c/font">http://&nbsp;</font</a>>  
<input name="url" value="<%= Request.Form("url") %>" size=30>  
</td>  
</tr>  
 <tr>  
<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">   
<b>Страна:</b>  
</td>  
</tr>  
   
<tr>  
<td colspan=2><input name="country" value="<%= Request.Form("country") %>" size=30></td></tr>  
 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">  
<b>Как Вы оцениваете наш сайт?</b><br>  
 <select NAME="Rating" size="1"><option value="0"  
<%  
 If Request.Form("Rating") = "0" then  
   Response.Write "selected"  
 End if  
%>  
 >Без оценки</option>  
  <option value="1" <% If Request.Form("Rating") = "1" then Response.Write "selected" End if %>  
 >1 Балл</option>  
 <option value="2" <% If Request.Form("Rating") = "2" then Response.Write "selected" End if %>  
 >2 Балла</option>  
 <option value="3" <% If Request.Form("Rating") = "3" then Response.Write "selected" End if %>  
 >3 Балла</option><option value="4" <% If Request.Form("Rating") = "4" then Response.Write "selected" End if %>  
 >4 Балла</option><option value="5" <% If Request.Form("Rating") = "5" then Response.Write "selected" End if %>  
 >5 Баллов</option></select></td></tr>  
 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>  
 "><b>Ваши комментарии:<font color=red><sup>*</sup></font></b></td></tr>  
 <tr><td align=center colspan=2><textarea name="Message" rows=6 cols=40 wrap="virtual"><%= Request.Form("Message") %></textarea></td></tr>  
 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="red" size="-2">  
   
<%  
 If dictFields(LCase("message")) Then  
  Response.Write "Вы не ввели сообщение</font><br>"  
 Else  
  Response.Write "&nbsp;<br></font>"  
 End If  
%>  
   
<INPUT type="submit" value="Оставить запись" name=submit></td></tr></table></form>  
<%  
 End Sub  
%>  

Затем следует основная функция, служащая для показа фиксированного количества  сообщений пользователей (значения извлекаемого из таблицы  административных настроек):

<%  
 Sub Show  
  NumPerPage=INT(objRec2("NumPerPage"))  
  If Request.QueryString("page") = "" Then  
    iPageCurrent = 1  
  Else  
    iPageCurrent = CInt(Request.QueryString("page"))  
  End If  
   
  Set objRec = Server.CreateObject ("ADODB.Recordset")  
  StrSql = "SELECT * FROM Messages ORDER BY ID DESC;"  
  objRec.PageSize = NumPerPage  
  objRec.CacheSize = NumPerPage  
  objRec.Open StrSql,objConn,3,1,&H0001  
  iPages = objRec.PageCount  
  TotalRows = objRec.RecordCount   
  If iPageCurrent > iPages Then iPageCurrent = iPages  
  If iPageCurrent < 1 Then iPageCurrent = 1  
  If iPages = 0 Then  
   Response.Write "Не найденно записей!"  
  Else  
   ObjRec.AbsolutePage = iPageCurrent  
%>  
   <p align=left><font face="<%=objRec2("PageFontFace")%>  
      " color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">  
      Всего в книге <b><%=TotalRows%></b> записей на <b><%=iPages%></b> странице(ах)</font></p>  
<%  
   
  iRecordsShown = 0  
   
  Do While iRecordsShown < NumPerPage And Not objRec.EOF  
    Rating = ObjRec("Rating")  
    If IsNull(Rating) or Rating="0" then  
      Rating = "nr"  
    Else   
      Rating = ObjRec("Rating")  
    End If  
   
    If IsNull(ObjRec("URL")) then  
     Link = "Не указан URL"  
    Else  
     Link = "<a href='http://" & ObjRec("URL") & "'>http://" & ObjRec("URL") & "</a>"  
    End If  
   
    Email = FormatStr(ObjRec("Email"))  
    Name = FormatStr(ObjRec("Name"))  
%>  
   
<table width="550" border="0" cellpadding="1" cellspacing="0">  
   
<tr>  
<td colspan="2" bgcolor="<%=ObjRec2("Top_Color")%>">  
  <font face="<%=objRec2("InfoFontFace")%>"   
  color="<%=objRec2("InfoFontColor")%>"   
  size="<%=objRec2("InfoFontSize")%>"><%=ObjRec("DateID") %>  
 </font>  
</td>  
   
<td align="right" bgcolor="<%=ObjRec2("Top_Color")%>">  
<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"    
 size="<%=objRec2("InfoFontSize")%>"><b>Оценка сайта: </b>  
</font>  
   
<img src="images/star<%= Rating %>.gif" height="14" width="65">  
</td>  
</tr>  
   
<tr><td colspan=3 bgcolor="<%=ObjRec2("Mid_Color")%>">  
<font face="<%=objRec2("MessageFontFace")%>" color="<%=objRec2("MessageFontColor")%>" size="<%=objRec2("MessageFontSize")%>"><%=FormatStr(ObjRec("Message"))%>  
</font>  
</td>  
</tr>  
   
<tr>  
<td width="110" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">  
<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"    
 size="<%=objRec2("InfoFontSize")%>">  
   
<%  
 If IsEmpty(Email) or Email=" " then  
   Response.Write Name  
 Else  
   Response.Write "<a href=""mailto:" & Email & """><img src=images/mail.gif border=0></a>&nbsp;" & Name  
 End If  
%>    
   
</font>  
</td>  
<td width="180" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">  
<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"   
size="<%=objRec2("InfoFontSize")%>"><%=FormatStr(ObjRec("Country")) %>&nbsp;<i>  
IP:<%= ObjRec("IP") %> </i>  
</font>  
</td>  
<td width=260 align="right" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">  
<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"   
size="<%=objRec2("InfoFontSize")%>">  
<%=Link%>  
</font>  
</td>  
</tr>  
</table>  
<br>  
   
<%  
   iRecordsShown = iRecordsShown + 1  
   objRec.MoveNext  
  Loop  
   
  if iPages > 1 then  
%>  
   
<p align=left>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"   
size="<%=objRec2("PageFontSize")%>">  
<b>Pages: </b>  
   
<%  
   For I = 1 To iPages  
   If I = iPageCurrent Then  
    Response.Write "<b>" & I & "</b> "  
   Else  
    Response.Write "<a href=./guest.asp?page=" & I & ">" & I & "</a> "  
   End If  
  Next  
  Response.Write "</font>"  
   
 Else  
  Response.Write "&nbsp;"  
 End If   
 End If  
 objRec.Close  
 Set objRec = Nothing  
 End Sub  
%>  

Обратите внимание на то, каким образом формируется и осуществляется ссылка на просмотр следующей странички с такой «порцией» сообщений:

    Response.Write "<a href=./guest.asp?page=" & I & ">" & I & "</a> "  

Как видите, в качестве значения параметра page ей передается номер странички и впоследствии, если это значение не равно 1, показ сообщений начинается не с первого сообщения, а с того, которое окажется первым по счету на страничке с соответствующим номером, заданным в параметре:

<%  
  NumPerPage=INT(objRec2("NumPerPage"))  
  If Request.QueryString("page") = "" Then  
    iPageCurrent = 1  
  Else  
    iPageCurrent = CInt(Request.QueryString("page"))  
  End If  
%>  
Далее следует исходный текст самого модуля, в котором осуществляются подключение к базе данных и извлечение записей (в описываемом примере это будет единственной записью) из таблицы административных настроек Admin:  
<%  
 Set objConn = Server.CreateObject ("ADODB.Connection")  
 objConn.Open StrConn  
 Set objRec2 = Server.CreateObject ("ADODB.Recordset")  
 ConfigSql = "SELECT * FROM Admin;"  
objRec2.Open ConfigSql,objConn,0,1,&H0001  
%>  

Затем можно оформить заголовок и основные тэги HTML-странички:

<head>  
<title>ASP на блюдечке часть 15 - Гостевая книга своими руками</title>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
</head>  
   
<body  marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">  
<table width="780" border="0" cellspacing="0" cellpadding="0">  
<tr>  
<td align="left" valign="top" height="389">   
<center>  
    
<table border="0" width="550" cellpadding="0">  
<tr>  
   
<td width=100% valign=bottom align=middle>  
<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">  

Теперь нужно сформировать ссылки на ваш функционал (просмотр и добавление записей в гостевую книгу):

<a href="guest.asp?mode=show">Просмотреть гостевую книгу</a> |   
<a href="guest.asp?mode=post">Оставить запись в гостевой книге</a>  
   
</font>  
<p>&nbsp;  
</td>  
</tr>  
   
<tr>  
<td align=center>  

И наконец, главный цикл обработки вашей главной и единственной asp-странички модуля будет выглядеть следующим образом:

<%  
 select case Request.QueryString("mode")  
  case "post"  
    Dim Field  
    Dim dictFields  
    Set dictFields = Server.CreateObject("Scripting.Dictionary")  
   
    For Each Field in Request.Form  
     If ValidateField(Request.Form(Field), Field) = False Then  
      dictFields.Add LCase(Field), True  
     End If  
    Next  
   
    If Request.Form.Count <> 0 And dictFields.Count = 0 Then  
     Call Update  
    Else  
     If Request.Form.Count <> 0 Then  
     End If  
     ShowForm("Sign")  
    End If  
   
  case "show"  
    Call Show  
    case Else  
    Call Show  
 End Select  
%>  

Здесь рассматриваются всего два случая (case), соответствующие двум функциям нашего Web-приложения: добавлениe новой записи в гостевую книгу (значение параметра mode = “post”) и просмотр сообщений гостевой книги (значение параметра mode = “show”).

<%  
 objRec2.Close  
 Set objRec2 = Nothing s 
 objConn.Close  
 Set objConn = Nothing  
 Response.Write "</td></tr></table></center>"  
%>  
   
 </td>  
</tr>  
</table>  
</body>  
</html>  
В начало В начало

Заключение

Мы рассмотрели еще один функциональный компонент сайта, причем сразу сделали его переносимым. Результатом этого явился довольно сложный с точки зрения восприятия исходный код. Хотя большое число параметров,  извлекаемых из административной таблицы, несколько усложнило восприятие исходного кода модуля, однако их применение раз и навсегда избавит вас от необходимости править код при их изменении. Разработанная нами система вполне приемлема в использовании, а благодаря модульности ее реализации и описанному в статье подходу к ее внедрению в уже существующие сайты она может быть применена в качестве гостевой книги на сайте практически любой степени сложности.

Следовало бы, конечно, рассмотреть и Web-интерфейс для редактирования, добавления и удаления административных настроек (схем), однако это займет много времени, и поэтому автор постарается освeтить его в одной из следующих частей настоящей статьи.

КомпьютерПресс 11'2001